/*
 * Equipe: Menandro Dias E. Neto
 *         Thiago Torres
 *         Ubirajara Gabriela
 */

package com.mapdelivery.model.dao;

import com.mapdelivery.beans.MapDeliveryBean;
import com.mapdelivery.beans.Cliente;
import java.util.ArrayList;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author menandro.neto
 */
public class DAOCliente implements MapDeliveryDAO {

    public void delete(Integer pk) {
        Database db = new Database();
        String sql = "delete from Cliente where ClienteId = " + pk.toString();
        db.execSQL(sql);
        db.disConnect();
    }

    public void insert(MapDeliveryBean mdBean) {
        Cliente bean = (Cliente) mdBean;
        Database db = new Database();

        /**
         *
         * @todo 1 Tratamento para reverter a transação em caso de falha
         * @todo 2 Obter o codigo da pessoa adicionada
         */
        db.beginTransaction();
        String sql = "insert into Pessoa values ("
                   + bean.getPessoaId().toString() + ", '"
                   + bean.getPesNome() + "', '"
                   + bean.getPesApelido() + "', '"
                   + bean.getPesEndereco() + "', '"
                   + bean.getPesBairro() + "', '"
                   + bean.getPesNumero() + "', '"
                   + bean.getPesComplemento() + "', '"
                   + bean.getPesCidade() + "', '"
                   + bean.getPesEstado() + "', '"
                   + bean.getPesTelefone() + "', '"
                   + bean.getPesCelular() + "')";
        db.execSQL(sql);

        sql = "insert into Cliente values ("
                   + bean.getClienteId().toString() + ", "
                   + bean.getPessoaId().toString() + ", '"
                   + bean.getCliPontoReferencia() + "', '"
                   + bean.getCliAtivo().toString() + "') ";
        db.execSQL(sql);
        db.commitTransaction();
        db.disConnect();
    }

    public void update(Integer pk, MapDeliveryBean mdBean) {
        Cliente bean = (Cliente) mdBean;
        Database db = new Database();
        db.beginTransaction();
        String sql = "update Cliente set "
                   + "pesNome = '" + bean.getPesNome() + "', '"
                   + "pesApelido = '" + bean.getPesApelido() + "', '"
                   + "pesEndereco = '" + bean.getPesEndereco() + "', '"
                   + "pesBairro = '" + bean.getPesBairro() + "', '"
                   + "pesNumero = '" + bean.getPesNumero() + "', '"
                   + "pesComplemento = '" + bean.getPesComplemento() + "', '"
                   + "pesCidade = '" + bean.getPesCidade() + "', '"
                   + "pesEstado = '" + bean.getPesEstado() + "', '"
                   + "pesTelefone = '" + bean.getPesTelefone() + "', '"
                   + "pesCelula = '" + bean.getPesCelular() + "'"
                   + "where PessoaId = " + bean.getPessoaId().toString();

        db.execSQL(sql);

        sql = "update Cliente set "
                   + "cliPontoReferencia = '" + bean.getCliPontoReferencia() + "', "
                   + "cliAtivo = '" + bean.getCliAtivo().toString() + "' "
                   + "where ClienteId = " + bean.getClienteId().toString();
        db.execSQL(sql);
        db.commitTransaction();
        db.disConnect();
    }

    public ArrayList<MapDeliveryBean> findAll() {
        ResultSet rsBean;
        Cliente bean = null;
        ArrayList<MapDeliveryBean> ret = new ArrayList<MapDeliveryBean>();
        Database db = new Database();
        String sql = "select * from Cliente "
                   + "join Pessoa on Pessoa.PessoaId = Cliente.PessoaId";
        rsBean = db.getResultSet(sql);
        try {
            while (rsBean.next())
                bean = new Cliente();
                bean.setClienteId(rsBean.getInt("ClienteId"));
                bean.setPessoaId(rsBean.getInt("PessoaId"));
                bean.setCliAtivo(rsBean.getString("CliAtivo").charAt(0));
                bean.setCliPontoReferencia(rsBean.getString("CliPontoReferencia"));
                bean.setPesNome(rsBean.getString("PesNome"));
                bean.setPesApelido(rsBean.getString("PesApelido"));
                bean.setPesBairro(rsBean.getString("PesBairro"));
                bean.setPesEndereco(rsBean.getString("PesEndereco"));
                bean.setPesCidade(rsBean.getString("PesCidade"));
                bean.setPesComplemento(rsBean.getString("PesComplemento"));
                bean.setPesEstado(rsBean.getString("PesEstado"));
                bean.setPesNumero(rsBean.getString("PesNumero"));
                bean.setPesTelefone(rsBean.getString("PesTelefone"));
                bean.setPesCelular(rsBean.getString("PesCelular"));
                ret.add(bean);
        }
        catch (SQLException e) {

        }
        db.disConnect();
        return ret;
    }

    public ArrayList<MapDeliveryBean> findByDesc(String arg) {
        ResultSet rsBean;
        Cliente bean = null;
        ArrayList<MapDeliveryBean> ret = new ArrayList<MapDeliveryBean>();
        Database db = new Database();
        String sql = "select * from Cliente "
                   + "join Pessoa on Pessoa.PessoaId = Cliente.PessoaId "
                   + "where pesNome = '" + arg + "'";
        rsBean = db.getResultSet(sql);
        try {
            while (rsBean.next())
                bean = new Cliente();
                bean.setClienteId(rsBean.getInt("ClienteId"));
                bean.setPessoaId(rsBean.getInt("PessoaId"));
                bean.setCliAtivo(rsBean.getString("CliAtivo").charAt(0));
                bean.setCliPontoReferencia(rsBean.getString("CliPontoReferencia"));
                bean.setPesNome(rsBean.getString("PesNome"));
                bean.setPesApelido(rsBean.getString("PesApelido"));
                bean.setPesBairro(rsBean.getString("PesBairro"));
                bean.setPesEndereco(rsBean.getString("PesEndereco"));
                bean.setPesCidade(rsBean.getString("PesCidade"));
                bean.setPesComplemento(rsBean.getString("PesComplemento"));
                bean.setPesEstado(rsBean.getString("PesEstado"));
                bean.setPesNumero(rsBean.getString("PesNumero"));
                bean.setPesTelefone(rsBean.getString("PesTelefone"));
                bean.setPesCelular(rsBean.getString("PesCelular"));
                ret.add(bean);
        }
        catch (SQLException e) {

        }
        db.disConnect();
        return ret;
    }

    public MapDeliveryBean findByPrimaryKey(Integer pk) {
        ResultSet rsBean;
        Cliente bean = null;
        Database db = new Database();
        String sql = "select * from Cliente "
                   + "join Pessoa on Pessoa.PessoaId = Cliente.PessoaId "
                   + "where ClienteId = " + pk.toString();
        rsBean = db.getResultSet(sql);
        try {
            while (rsBean.next())
                bean = new Cliente();
                bean.setClienteId(rsBean.getInt("ClienteId"));
                bean.setPessoaId(rsBean.getInt("PessoaId"));
                bean.setCliAtivo(rsBean.getString("CliAtivo").charAt(0));
                bean.setCliPontoReferencia(rsBean.getString("CliPontoReferencia"));
                bean.setPesNome(rsBean.getString("PesNome"));
                bean.setPesApelido(rsBean.getString("PesApelido"));
                bean.setPesBairro(rsBean.getString("PesBairro"));
                bean.setPesEndereco(rsBean.getString("PesEndereco"));
                bean.setPesCidade(rsBean.getString("PesCidade"));
                bean.setPesComplemento(rsBean.getString("PesComplemento"));
                bean.setPesEstado(rsBean.getString("PesEstado"));
                bean.setPesNumero(rsBean.getString("PesNumero"));
                bean.setPesTelefone(rsBean.getString("PesTelefone"));
                bean.setPesCelular(rsBean.getString("PesCelular"));
        }
        catch (SQLException e) {

        }
        db.disConnect();
        return bean;
    }
}
